package modeloDatos;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Servicio {
	private Integer idServicio;
	private Integer idPresupuesto;
	private Date fechaInicio;
	private Date fechaFin;
	private String conceptos;
	private List<Concepto> listaConceptos;
	private Float total;
	private Integer IVA;
	private Float totalIVA;
	private String tipoServicio;
	private Integer idTipoServicio;
	private Integer tipoValor;
	private String valor;
	
	public Servicio(int idServicio, String descripcion, int IVA){
		this.idTipoServicio = idServicio;
		this.tipoServicio = descripcion;
		this.conceptos = "";
		this.listaConceptos = new ArrayList<Concepto>();
		this.total = (float) 0.0;
		this.IVA = IVA;
		this.totalIVA = (float)0.0;
	}
	
	public Servicio(int idServicio, int idPresupuesto2, String tipoServicio2, int idTipoServicio,int tipoValor, String idValor2, int IVA) {
		this.idServicio =idServicio;
		this.idPresupuesto = idPresupuesto2;
	
		this.tipoServicio = tipoServicio2;
		this.idTipoServicio = idTipoServicio;
		this.setTipoValor(tipoValor);
		this.valor = idValor2;
		this.conceptos = "";
		this.listaConceptos = new ArrayList<Concepto>();
		this.total = (float) 0.0;
		this.IVA = IVA;
		this.totalIVA = (float) 0.0;
	}
	
	public Servicio(int idServicio, int idPresupuesto2, String tipoServicio2, int idTipoServicio,int tipoValor, String idValor2,String conceptos, float total, int IVA) {
		this.idServicio =idServicio;
		this.idPresupuesto = idPresupuesto2;
		this.tipoServicio = tipoServicio2;
		this.idTipoServicio = idTipoServicio;
		this.setTipoValor(tipoValor);
		this.valor = idValor2;
		this.conceptos = conceptos;
		this.listaConceptos = calcularListaConceptos();
		this.total = total;
		this.IVA = IVA;
		this.totalIVA = total + (total*IVA/100);
	}
	public Integer getIdServicio() {
		return idServicio;
	}
	public void setIdServicio(Integer idServicio) {
		this.idServicio = idServicio;
	}
	public Integer getIdPresupuesto() {
		return idPresupuesto;
	}
	public void setIdPresupuesto(Integer idPresupuesto) {
		this.idPresupuesto = idPresupuesto;
	}
	public Date getFechaInicio() {
		return fechaInicio;
	}
	public void setFechaInicio(Date fechaInicio) {
		this.fechaInicio = fechaInicio;
	}
	public Date getFechaFin() {
		return fechaFin;
	}
	public void setFechaFin(Date fechaFin) {
		this.fechaFin = fechaFin;
	}
	public String getTipoServicio() {
		return tipoServicio;
	}
	public void setTipoServicio(String tipoServicio) {
		this.tipoServicio = tipoServicio;
	}
	public String getValor() {
		return valor;
	}
	public void setValor(String valor) {
		this.valor = valor;
	}

	public Integer getIdTipoServicio() {
		return idTipoServicio;
	}

	public void setIdTipoServicio(Integer idTipoServicio) {
		this.idTipoServicio = idTipoServicio;
	}

	public Integer getTipoValor() {
		return tipoValor;
	}

	public void setTipoValor(Integer tipoValor) {
		this.tipoValor = tipoValor;
	}
	
	private List<Concepto> calcularListaConceptos(){
		List<Concepto> conceptos = new ArrayList<Concepto>();
		if(this.conceptos != null){
			StringTokenizer tokens = new StringTokenizer(this.conceptos,"&");
			while(tokens.hasMoreTokens()){
				
				String conceptoValorCantidad = tokens.nextToken();
				int cv = conceptoValorCantidad.indexOf("::");
				int vc = conceptoValorCantidad.indexOf("#");
				String concepto = conceptoValorCantidad.substring(0,cv);
				float valor = Float.parseFloat(conceptoValorCantidad.substring(cv+2, vc));
				int cantidad = Integer.parseInt(conceptoValorCantidad.substring(vc+1));
				Concepto c = new Concepto(concepto,cantidad,valor);
				conceptos.add(c);
			}
		}
		return conceptos;
		
	}
	

	// Formato:   linea::coste#cantidad&linea::coste#cantidad&
	public String getConceptos() {
		return conceptos;
	}
	
	public List<Concepto> getListaConceptos(){
		return listaConceptos;
	}

	
	
	public void setListaConceptos(List<Concepto> listaConceptos) {
		this.listaConceptos = listaConceptos;
		this.conceptos = "";
		for(Concepto cp: listaConceptos){
			conceptos += cp.getConcepto() + "::" + cp.getValor() + "#" + cp.getCantidad() + "&";
		}
	}

	public void setConceptos(String conceptos) {
		this.conceptos = conceptos;
		this.listaConceptos = calcularListaConceptos();
	}
	
	public Float getSubTotal() {
		return total;
	}

	public void setSubTotal(Float total) {
		this.total = total;
		this.totalIVA = total + (total*IVA/100);
	}

	public Integer getIVA() {
		return IVA;
	}

	public void setIVA(Integer iVA) {
		IVA = iVA;
		this.totalIVA = this.total + (this.total*this.IVA/100);
	}

	public Float getTotalIVA() {
		return totalIVA;
	}



}
